import socket
import os

def send_udp_message(message, ipv6_address, port, interface="eth0"):
    # 获取接口索引
    try:
        interface_index = socket.if_nametoindex(interface)
    except AttributeError:  # 如果系统不支持if_nametoindex
        print("当前系统不支持直接获取接口索引，请检查网络配置。")
        return
    
    # 创建 IPv6 UDP socket
    sock = socket.socket(socket.AF_INET6, socket.SOCK_DGRAM)
    
    # 尝试设置IPV6_BOUND_IF设置（注意：这个在某些系统或Python版本可能不可用）
    try:
        sock.setsockopt(socket.IPPROTO_IPV6, socket.IPV6_BOUND_IF, interface_index)
    except OSError as e:
        print(f"设置接口失败: {e}")
    
    try:
        # 格式化IPv6地址以包含接口标识（%interface），这在某些情况下可能不是必需的
        full_ipv6_address = f"{ipv6_address}%{interface}"
        
        # 发送消息到指定的 IPv6 地址和端口
        sock.sendto(message.encode(), (full_ipv6_address, port))
        print("UDP 消息已发送到", full_ipv6_address, "端口", port)
    finally:
        # 关闭 socket 连接
        sock.close()

# 使用函数
send_udp_message("Hello, UDP!", "fe80::6462:ad3a:227a:e6d", 8887)